package com.fengling.Config;

public class Text {
    public static void main(String[] args) {
        int [] a={58,69,85,85,85,85,89,102,258,321,452,654,852,978};
        System.out.println(right(a, 85));
    }
    //二分查找基础版  （升序的数组）
    //（还有个二分查找改动版  让指针j永远不参与查找）
    public static int binarySearchBasic(int[] a, int target) {
        //设置索引指针和初值
        int i = 0;
        int j = a.length - 1;

        while (i <= j) {                //表示i和j还之间有东西
            int mid = (i+j)>>>1;        //中间索引
            if (a[mid] < target) {      //目标在右边
                i = mid + 1;
            } else if (target<a[mid]) { //目标在左边
                j = mid - 1;
            } else {                    //找到了目标
                return mid;
            }

        }
        return -1;
    }

    //二分查找寻找最左侧的 leftmost
    public static int binarySearchBasic2(int[] a, int target) {
        //设置索引指针和初值
        int i = 0;
        int j = a.length - 1;
        int candidate=-1;           //记录候选位置

        while (i <= j) {                //表示i和j还之间有东西
            int mid = (i+j)>>>1;        //中间索引

            if (a[mid] < target) {      //目标在右边
                i = mid + 1;
            } else if (target<a[mid]) { //目标在左边
                j = mid - 1;
            } else {                    //找到了目标
                candidate=mid;
                j=mid-1;
            }

        }
        return candidate;
    }
    //力扣 704.二分查找（平衡版实现  也就是固定只比较一次）

    public int text01(int[] nums, int target){
        int i=0;
        int j=nums.length;
        while (i+1<j){
            int mid=(i+j)>>>1;
            if(target<nums[mid]){
                j=mid;
            } else  {
                i=mid;
            }
        }
        return (nums[i]==target)?i:-1;
    }

    public static int right(int[] nums,int target){
        int i=0;
        int j= nums.length - 1;
        int candidate =-1;
        while (i<=j){

                int mid = (i+j)>>>1;

                if (nums[mid] < target) {
                    i = mid + 1;
                } else if (target<nums[mid]) {
                    j = mid - 1;
                } else {
                    candidate=mid;
                   i=mid+1;
                }

            }
            return candidate;

        }

    }



